package com.hochschild.sgv.service.implementacion;

import com.hochschild.sgv.domain.Vacacion;
import com.hochschild.sgv.sap.ConexionSAP;
import com.hochschild.sgv.service.VacacionesManager;
import com.sap.mw.jco.JCO.Table;
import java.util.ArrayList;
import java.util.List;

public class SimpleVacacionesManager implements VacacionesManager {

    public String aprobarVacaciones(String idUsuario, String fechaInicio, String fechaFin) {
        String strResult = "";
        ConexionSAP conexionSAP = new ConexionSAP();
        try {
            conexionSAP = ConexionSAP.getConexionSAP();
            conexionSAP.RegistrarRFC("ZHR_RFC_APRUEBA_VACACIONES");
            conexionSAP.IngresarDatosInput(idUsuario, "I_UNAME");//(usuario SAP)
            conexionSAP.IngresarDatosInput(fechaInicio, "I_BEGDA");//(fecha inicio)
            conexionSAP.IngresarDatosInput(fechaFin, "I_ENDDA");//(fecha fin),
            conexionSAP.EjecutarRFC();
            String subr = conexionSAP.rFC.getExportParameterList().getString("O_SUBRC");
            Table table = conexionSAP.rFC.getTableParameterList().getTable("T_MSG");
            for (int i = 0; i < table.getNumRows(); i++) {
                table.setRow(i);
                strResult += table.getField("MESSAGE").getString() + "\n";
            }

            strResult = subr + strResult;

        } catch (Exception e) {
            strResult = e.toString();
        } finally {
            conexionSAP.DesconectarSAP();
        }
        return strResult;
    }

    public String anularVacaciones(String idUsuario, String fechaInicio, String fechaFin) {

        String strResult = "";
        ConexionSAP conexionSAP = new ConexionSAP();
        try {
            conexionSAP = ConexionSAP.getConexionSAP();
            conexionSAP.RegistrarRFC("ZHR_RFC_ANULA_VACACIONES");
            conexionSAP.IngresarDatosInput(idUsuario, "I_UNAME");//(usuario SAP)
            conexionSAP.IngresarDatosInput(fechaInicio, "I_BEGDA");//(fecha inicio)
            conexionSAP.IngresarDatosInput(fechaFin, "I_ENDDA");//(fecha fin),
            conexionSAP.EjecutarRFC();
            String subr = conexionSAP.rFC.getExportParameterList().getString("O_SUBRC");
            Table table = conexionSAP.rFC.getTableParameterList().getTable("T_MSG");
            for (int i = 0; i < table.getNumRows(); i++) {
                table.setRow(i);
                strResult += table.getField("MESSAGE").getString() + "\n";
            }
            strResult = subr + strResult;
        } catch (Exception e) {
            strResult = e.toString();
        } finally {
            conexionSAP.DesconectarSAP();
        }
        return strResult;
    }

    public List<Vacacion> consultarVacaciones(String idUsuario) {
        List<Vacacion> vacaciones = new ArrayList<Vacacion>();
        ConexionSAP conexionSAP = new ConexionSAP();
        try {
            conexionSAP = ConexionSAP.getConexionSAP();
            conexionSAP.RegistrarRFC("ZHR_RFC_MIS_VACACIONES");
            conexionSAP.IngresarDatosInput(idUsuario, "I_UNAME");
            conexionSAP.EjecutarRFC();
            Table table = conexionSAP.rFC.getTableParameterList().getTable("T_DATOS");

            for (int i = 0; i < table.getNumRows(); i++) {
                table.setRow(i);
                String[] fila = table.getField("LINEA").getString().split("[|]");
                Vacacion vacacionSap = new Vacacion();
                vacacionSap.setPeriodo(fila[0]);
                vacacionSap.setDiasHabiles((int) (Double.parseDouble(fila[2])));
                vacacionSap.setDiasGozados((int) (Double.parseDouble(fila[3])));
                vacacionSap.setSaldo((int) (Double.parseDouble(fila[4])));
                vacacionSap.setFechaInicio(fila[5]);
                vacacionSap.setFechaFin(fila[6]);
                vacacionSap.setDias((int) (Double.parseDouble(fila[7])));
                vacaciones.add(vacacionSap);
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            conexionSAP.DesconectarSAP();
        }

        return vacaciones;
    }
}
